package k1_exercise;


/**
 * 示例 1:
 * 输入：[1,8,6,2,5,4,8,3,7]
 * 输出：49
 *
 * 示例 2：
 * 输入：height = [4,3,2,1,4]
 * 输出：16
 *
 * 示例 3：
 * 输入：height = [1,2,1]
 * 输出：2
 */
public class Array_area {


    /**
     * 第一种方法，嵌套循环，两两组合进行比较，时间复杂度为 n*n
     */
    public void method1(){
        int[] nums = {1,2,1};

        int maxArea = 0;

        int currentArea = 0;

        for (int i = 0; i < nums.length-1; i++) {
            for (int j = i+1; j < nums.length; j++) {
                //通过三目的形式实现高的计算，再计算当前面积
                currentArea = (j-i)*(nums[i]<nums[j]?nums[i]:nums[j]);

                if(currentArea>maxArea){
                    maxArea = currentArea;
                }

            }
        }

        System.out.println(maxArea);
    }

    /**
     * 第二种方法，使用双指针实现，时间复杂度为 n
     */
    public void method2(){
        int[] nums = {1,8,6,2,5,4,8,3,7};

        //初始化左右指针
        int index_left = 0;
        int index_right = nums.length-1;

        int maxArea = 0;
        int currentArea = 0;

        //如果左指针没有与右指针重合且没有越过右指针，继续执行
        while(index_left<index_right){
            //计算此时的面积
            currentArea = (index_right-index_left)*(nums[index_left]<nums[index_right]?nums[index_left++]:nums[index_right--]);

            if(currentArea>maxArea){
                maxArea = currentArea;
            }
        }

        System.out.println(maxArea);
    }

    public static void main(String[] args) {

        Array_area arrayArea = new Array_area();

        arrayArea.method1();
        arrayArea.method2();

    }

}
